/*
 * @CreateTime: Nov 7, 2017 10:44 AM
 * @Author: Conroy
 * @Contact: jianwen.liu@sunlight-tech.com
 * @Last Modified By: Conroy
 * @Last Modified Time: Nov 7, 2017 1:25 PM
 * @Description: Modify Here, Please
 */

'use strict';

// 中间件  用于读取web项目打包build文件；


import fs from 'fs';
import config from '../../config';

// 判断是否为api 接口， （/api 开头的为接口，否则为静态文件）；
function isApi(url) {
  console.log('url', url);
  return url.split('/')[1] === 'api' ? true : false;
}


// 读取文件
function getFileData(url) {
  console.log('getFileData');
  return new Promise((resovle, reject) => {
    let URL = `${config.webRoot + url}`;
    // 读取图片文件
    // if (/\.(ico|png|jpe?g|svg|gif|bmp)$/.test(url)) {
    //   fs.readFile(URL, 'base64', (err, data) => {
    //     if (err) {
    //       reject(err);
    //     } else {
    //       resovle(data);
    //       console.log(data);
    //     }
    //   });
    //   return;
    // }
    // 读取非图片文件
    fs.readFile(URL, 'binary', (err, data) => {
      if (err) {
        reject(err);
      } else {
        resovle(data);
        // console.log(data);
      }
    });
  });
}

// 中间件
export default function () {
  return async (ctx, next) => {
    // console.log('come middle', ctx);
    if (ctx.request.url === '/') {
      await ctx.render('index', {
        title: 'test'
      });
      return;
    }
    if (!isApi(ctx.request.url)) {
      let data = await getFileData(ctx.request.url);
      ctx.status = 200;
      if (/\.(ico|png|jpe?g|gif|bmp)$/.test(ctx.request.url)) {
        console.log('img');
        ctx.res.writeHead(200);
        ctx.res.write(data, 'binary');
        ctx.res.end();
      } else {
        let _fileType = ctx.request.url.split('.')[ctx.request.url.split('.').length - 1];
        switch (_fileType) {
          case 'js':
            ctx.set('content-type', 'application/x-javascript');
            break;
          case 'css':
            ctx.set('content-type', 'text/css');
            break;
          case 'svg':
            ctx.set('content-type', 'image/svg+xml');
            break;
          default:
            break;
        }
        ctx.body = data;
      }

      // await next();
    }
    // await next();
  };
}
